package com.hanser.hancoder.core.saver;

import com.hanser.hancoder.ai.model.HtmlCodeResult;
import com.hanser.hancoder.ai.model.MultiFileCodeResult;
import com.hanser.hancoder.exception.BusinessException;
import com.hanser.hancoder.exception.ErrorCode;
import com.hanser.hancoder.model.enums.CodeGenTypeEnum;

import java.io.File;

/**
 * 代码文件保存执行器
 * 根据代码生成类型选择对应的保存模板来执行代码文件的保存操作
 */
public class CodeFileSaverExecutor {

    /**
     * HTML代码文件保存模板实例
     */
    private static final HtmlCodeFileSaverTemplate HTML_CODE_FILE_SAVER_TEMPLATE = new HtmlCodeFileSaverTemplate();
    
    /**
     * 多文件代码保存模板实例
     */
    private static final MultiFileCodeFileSaverTemplate MULTI_FILE_CODE_FILE_SAVER_TEMPLATE = new MultiFileCodeFileSaverTemplate();

    /**
     * 执行代码保存操作
     *
     * @param codeResult       代码生成结果对象，根据代码生成类型转换为相应的结果类型
     * @param codeGenTypeEnum  代码生成类型枚举，决定使用哪种保存模板
     * @param appId 应用id
     * @return 保存目录的File对象
     * @throws BusinessException 当代码生成类型不支持时抛出业务异常
     */
    public static File executeSaver(Object codeResult, CodeGenTypeEnum codeGenTypeEnum, Long appId) {
        // 根据代码生成类型选择对应的保存模板执行保存操作
        return switch (codeGenTypeEnum) {
            case HTML -> HTML_CODE_FILE_SAVER_TEMPLATE.saveCode((HtmlCodeResult) codeResult,appId);
            case MULTI_FILE -> MULTI_FILE_CODE_FILE_SAVER_TEMPLATE.saveCode((MultiFileCodeResult) codeResult,appId);
            default -> throw new BusinessException(ErrorCode.SYSTEM_ERROR, "不支持的代码生成类型");
        };
    }
}
